using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Drawing;
using MonoTouch.ObjCRuntime;
using System;
using MonoTouch.CoreGraphics;
using MonoTouch.CoreFoundation;
using MonoTouch.CoreLocation;
using MonoTouch.MapKit;

namespace Tapku
{

[BaseType (typeof (UITableViewCell))]
interface ABTableViewCell {
        //- (void)drawContentView:(CGRect)r;
        [Export ("drawContentView:")]
        void DrawContentView (System.Drawing.RectangleF r);

        [Export ("initWithStyle:reuseIdentifier:")]
        IntPtr Constructor (UITableViewCellStyle style, string reuseIdentifier);
}

[BaseType (typeof (ABTableViewCell))]
interface FSIndicatorCell {
        //@property (copy,nonatomic) NSString *text;
        [Export ("text", ArgumentSemantic.Copy)]
        string Text { get; set;  }

        //@property (assign, nonatomic) int count;
        [Export ("count", ArgumentSemantic.Assign)]
        int Count { get; set;  }

        [Export ("initWithStyle:reuseIdentifier:")]
        IntPtr Constructor (UITableViewCellStyle style, string reuseIdentifier);
}

[BaseType (typeof (ABTableViewCell))]
interface FSSubtitleCell {
        //@property (copy,nonatomic) NSString *title;
        [Export ("title", ArgumentSemantic.Copy)]
        string Title { get; set;  }

        //@property (copy,nonatomic) NSString *subtitle;
        [Export ("subtitle", ArgumentSemantic.Copy)]
        string Subtitle { get; set;  }

        [Export ("initWithStyle:reuseIdentifier:")]
        IntPtr Constructor (UITableViewCellStyle style, string reuseIdentifier);
}

[BaseType (typeof (UIView))]
interface LoadingHUDView {
        //- (id) initWithTitle:(NSString*)ttl message:(NSString*)msg;
        //[Export ("initWithTitle:message:")]
        //LoadingHUDView InitWithTitle (string ttl, string msg);

        //- (id) initWithTitle:(NSString*)ttl;
        //[Export ("initWithTitle:")]
        //LoadingHUDView InitWithTitle (string ttl);
        
        [Export ("initWithTitle:")]
        IntPtr Constructor (string title);
        
        [Export ("initWithTitle:message:")]
        IntPtr Constructor (string title, string message);

        //- (void) startAnimating;
        [Export ("startAnimating")]
        void StartAnimating ();

        //- (void) stopAnimating;
        [Export ("stopAnimating")]
        void StopAnimating ();

        //@property (copy,nonatomic) NSString *title;
        [Export ("title", ArgumentSemantic.Copy)]
        string Title { get; set;  }

        //@property (copy,nonatomic) NSString *message;
        [Export ("message", ArgumentSemantic.Copy)]
        string Message { get; set;  }

}

[BaseType (typeof (TapDetectingView))]
interface ODCalendarDayEventView {
        //@property (nonatomic, copy) NSNumber *id;
        [Export ("id", ArgumentSemantic.Copy)]
        NSNumber Id { get; set;  }

        //@property (nonatomic, copy) NSDate *startDate;
        [Export ("startDate", ArgumentSemantic.Copy)]
        NSDate StartDate { get; set;  }

        //@property (nonatomic, copy) NSDate *endDate;
        [Export ("endDate", ArgumentSemantic.Copy)]
        NSDate EndDate { get; set;  }

        //@property (nonatomic, copy) NSString *title;
        [Export ("title", ArgumentSemantic.Copy)]
        string Title { get; set;  }

        //@property (nonatomic, copy) NSString *location;
        [Export ("location", ArgumentSemantic.Copy)]
        string Location { get; set;  }

        //- (void)setupCustomInitialisation;
        [Export ("setupCustomInitialisation")]
        void SetupCustomInitialisation ();

        //[Static]
        //+ (id)eventViewWithFrame:(CGRect)frame id:(NSNumber *)id startDate:(NSDate *)startDate endDate:(NSDate *)endDate title:(NSString *)title location:(NSString *)location;
        //[Export ("eventViewWithFrame:id:startDate:endDate:title:location:")]
        //ODCalendarDayEventView EventViewWithFrame (System.Drawing.RectangleF frame, NSNumber  id, NSDate  startDate, NSDate  endDate, string title, string location);

        [Export("eventViewWithFrame:id:startDate:endDate:title:location:")]
        IntPtr Constructor (System.Drawing.RectangleF frame, NSNumber id, NSDate startDate, NSDate endDate, string title, string  location);
}

[BaseType (typeof (UIView))]
interface ODCalendarDayTimelineView {
        //@property (nonatomic, readonly) UIScrollView *scrollView;
        [Export ("scrollView")]
        UIScrollView ScrollView { get;  }

        //@property (nonatomic, readonly) ODTimelineView *timelineView;
        [Export ("timelineView")]
        ODTimelineView TimelineView { get;  }

        //@property (nonatomic, retain) NSArray *events;
        [Export ("events", ArgumentSemantic.Retain)]
        NSObject[] Events { get; set;  }

        //@property (nonatomic, copy) NSDate *currentDay;
        [Export ("currentDay", ArgumentSemantic.Copy)]
        NSDate CurrentDay { get; set;  }

        //@property (nonatomic, retain) id <ODCalendarDayTimelineViewDelegate> delegate;
  //Original:
  //[Export ("<ODCalendarDayTimelineViewDelegate>", ArgumentSemantic.Retain)]
  //ODCalendarDayTimelineView <ODCalendarDayTimelineViewDelegate> { get; set;  }
  //Fixed:
  [Export ("delegate", ArgumentSemantic.Retain)]
  ODCalendarDayTimelineViewDelegate Delegate { get; set; }
 
        //- (void)setupCustomInitialisation;
        [Export ("setupCustomInitialisation")]
        void SetupCustomInitialisation ();

        //- (void)reloadDay;
        [Export ("reloadDay")]
        void ReloadDay ();

}

[BaseType (typeof (NSObject))]
[Model]
interface ODCalendarDayTimelineViewDelegate {
        [Abstract]
        //- (NSArray *)calendarDayTimelineView:(ODCalendarDayTimelineView*)calendarDayTimeline eventsForDate:(NSDate *)eventDate;
        [Export ("calendarDayTimelineView:eventsForDate:")]
        NSObject[] CalendarDayTimelineView (ODCalendarDayTimelineView calendarDayTimeline, NSDate  eventDate);

        [Abstract]
        //@optional- (void)calendarDayTimelineView:(ODCalendarDayTimelineView*)calendarDayTimeline eventViewWasSelected:(ODCalendarDayEventView *)eventView;
        [Export ("calendarDayTimelineView:eventViewWasSelected:")]
        void CalendarDayTimelineView (ODCalendarDayTimelineView calendarDayTimeline, ODCalendarDayEventView  eventView);

}

[BaseType (typeof (UIView))]
interface ODTimelineView {
        //@property (nonatomic, readonly) NSArray *times;
        [Export ("times")]
        NSObject[] Times { get;  }

        //@property (nonatomic, readonly) NSArray *periods;
        [Export ("periods")]
        NSObject[] Periods { get;  }

        //- (void)setupCustomInitialisation;
        [Export ("setupCustomInitialisation")]
        void SetupCustomInitialisation ();

}

[BaseType (typeof (UIViewController))]
interface ODCalendarDayViewController {
        //@property (nonatomic, readonly) ODCalendarDayTimelineView *calendarDayTimelineView;
        [Export ("calendarDayTimelineView")]
        ODCalendarDayTimelineView CalendarDayTimelineView { get;  }

}

[BaseType (typeof (UITableViewCell))]
interface TKButtonCell {
        //@property (copy,nonatomic) NSString *text;
        [Export ("text", ArgumentSemantic.Copy)]
        string Text { get; set;  }

}

[BaseType (typeof (UIView))]
interface TKCalendarMonthView {
        //@property (assign, nonatomic) id <TKCalendarMonthViewDelegate> delegate;
        //Original:
  //[Export ("<TKCalendarMonthViewDelegate>", ArgumentSemantic.Assign)]
  //TKCalendarMonthView <TKCalendarMonthViewDelegate> { get; set;  }
  //Fixed:
  [Export ("delegate", ArgumentSemantic.Assign)]
  TKCalendarMonthViewDelegate Delegate { get; set; }
 
        //@property (readonly,nonatomic) int lines;
        [Export ("lines")]
        int Lines { get;  }


        //@property (readonly,nonatomic) int weekdayOfFirst;
        [Export ("weekdayOfFirst")]
        int WeekdayOfFirst { get;  }

        //@property (readonly,nonatomic) NSDate* dateOfFirst;
        [Export ("dateOfFirst")]
        NSDate DateOfFirst { get;  }

        //@property (nonatomic, retain) NSArray *marks;
        [Export ("marks", ArgumentSemantic.Retain)]
        NSObject[] Marks { get; set;  }

        //- (id) initWithFrame:(CGRect)frame startDate:(NSDate*)theDate today:(NSInteger)todayDay marked:(NSArray*)marksArray;
        //[Export ("initWithFrame:startDate:today:marked:")]
        //TKCalendarMonthView InitWithFrame (System.Drawing.RectangleF frame, NSDate theDate, int todayDay, NSObject[] marksArray);

        [Export ("initWithFrame:startDate:today:marked:")]
        IntPtr Constructor(System.Drawing.RectangleF frame, NSDate theDate, int todayDay, NSObject[] marksArray);
        

        //- (void) selectDay:(int)theDayNumber;
        [Export ("selectDay:")]
        void SelectDay (int theDayNumber);

        //- (void) resetMarks;
        [Export ("resetMarks")]
        void ResetMarks ();

}

[BaseType (typeof (NSObject))]
[Model]
interface TKCalendarMonthViewDelegate {
        [Abstract]
        //- (void) calendarMonth:(TKCalendarMonthView*)calendarMonth dateWasSelected:(NSInteger)integer;
        [Export ("calendarMonth:dateWasSelected:")]
        void DateWasSelected (TKCalendarMonthView calendarMonth, int integer);

        [Abstract]
        //- (void) calendarMonth:(TKCalendarMonthView*)calendarMonth previousMonthDayWasSelected:(NSInteger)day;
        [Export ("calendarMonth:previousMonthDayWasSelected:")]
        void PreviousMonthDayWasSelected (TKCalendarMonthView calendarMonth, int day);

        [Abstract]
        //- (void) calendarMonth:(TKCalendarMonthView*)calendarMonth nextMonthDayWasSelected:(NSInteger)day;
        [Export ("calendarMonth:nextMonthDayWasSelected:")]
        void NextMonthDayWasSelected (TKCalendarMonthView calendarMonth, int day);

}

[BaseType (typeof (UIView))]
interface TKCalendarDayView {
        //@property (copy,nonatomic) NSString *str;
        [Export ("str", ArgumentSemantic.Copy)]
        string Str { get; set;  }

        //@property (assign,nonatomic) BOOL selected;
        [Export ("selected", ArgumentSemantic.Assign)]
        bool Selected { get; set;  }

        //@property (assign,nonatomic) BOOL active;
        [Export ("active", ArgumentSemantic.Assign)]
        bool Active { get; set;  }

        //@property (assign,nonatomic) BOOL today;
        [Export ("today", ArgumentSemantic.Assign)]
        bool Today { get; set;  }

        //@property (assign,nonatomic) BOOL marked;
        [Export ("marked", ArgumentSemantic.Assign)]
        bool Marked { get; set;  }

}

[BaseType (typeof (UIView))]
interface TKCalendarView {
        //@property (copy,nonatomic) NSString *monthString;
        [Export ("monthString", ArgumentSemantic.Copy)]
        string MonthString { get; set;  }

        //@property (copy,nonatomic) NSDate *selectedMonth;
        [Export ("selectedMonth", ArgumentSemantic.Copy)]
        NSDate SelectedMonth { get; set;  }

        //@property (assign,nonatomic) id <TKCalendarViewDelegate> delegate;
  //Original:
  //[Export ("<TKCalendarViewDelegate>", ArgumentSemantic.Assign)]
  //TKCalendarView <TKCalendarViewDelegate> { get; set;  }
  //Fixed:
  [Export ("delegate", ArgumentSemantic.Assign)]
  TKCalendarViewDelegate Delegate { get; set; }

        //- (id) initWithFrame:(CGRect)frame delegate:(id)delegate;
        //[Export ("initWithFrame:delegate:")]
        //TKCalendarView InitWithFrame (System.Drawing.RectangleF frame, NSObject delegate1);

        [Export ("initWithFrame:delegate:")]
        IntPtr Constructor (System.Drawing.RectangleF frame, TKCalendarViewDelegate calendarViewDelegate);

        //- (void) reloadMarks;
        [Export ("reloadMarks")]
        void ReloadMarks ();

        //- (void) selectDate:(NSDate *)date;
        [Export ("selectDate:")]
        void SelectDate (NSDate  date);

}

[BaseType (typeof (NSObject))]
[Model]
interface TKCalendarViewDelegate {
        [Abstract]
        //- (void) calendarView:(TKCalendarView*)calendar dateWasSelected:(NSInteger)integer ofMonth:(NSDate*)monthDate;
        [Export ("calendarView:dateWasSelected:ofMonth:")]
        void DateWasSelected (TKCalendarView calendar, int integer, NSDate monthDate);

        [Abstract]
        //- (NSArray*) calendarView:(TKCalendarView*)calendar itemsForDaysInMonth:(NSDate*)monthDate;
        [Export ("calendarView:itemsForDaysInMonth:")]
        NSObject[] ItemsForDaysInMonth (TKCalendarView calendar, NSDate monthDate);

        [Abstract]
        //- (void) calendarView:(TKCalendarView*)calendar willShowMonth:(NSDate*)monthDate;
        [Export ("calendarView:willShowMonth:")]
        void WillShowMonth (TKCalendarView calendar, NSDate monthDate);

}

[BaseType (typeof (UIViewController))]
interface TKCalendarViewController {
        //@property (retain,nonatomic) TKCalendarView *calendarView;
        [Export ("calendarView", ArgumentSemantic.Retain)]
        TKCalendarView CalendarView { get; set;  }

}

[BaseType (typeof (UIView))]
interface TKEmptyView {
        //@property (retain,nonatomic) UILabel *title;
        [Export ("title", ArgumentSemantic.Retain)]
        UILabel Title { get; set;  }

        //@property (retain,nonatomic) UILabel *subtitle;
        [Export ("subtitle", ArgumentSemantic.Retain)]
        UILabel Subtitle { get; set;  }

        //@property (retain,nonatomic) UIImage *mask;
        [Export ("mask", ArgumentSemantic.Retain)]
        UIImage Mask { get; set;  }

        //- (id) initWithFrame:(CGRect)frame                            mask:(UIImage*)image                       title:(NSString*)titleString                         subtitle:(NSString*)subtitleString;
        //[Export ("initWithFrame:")]
        //TKEmptyView InitWithFrame (System.Drawing.RectangleF frame, UIImage image, string titleString, string subtitleString);

        [Export ("initWithFrame:mask:title:subtitle:")]
        IntPtr Constructor (System.Drawing.RectangleF frame, UIImage image, string title, string subtitle);
        

        //- (id) initWithFrame:(CGRect)frame      emptyViewImage:(TKEmptyViewImage)image                           title:(NSString*)titleString                         subtitle:(NSString*)subtitleString;
        //[Export ("initWithFrame:")]
        //TKEmptyView InitWithFrame (System.Drawing.RectangleF frame, TKEmptyViewImage image, string titleString, string subtitleString);

        [Export ("initWithFrame:emptyViewImage:title:subtitle:")]
        IntPtr Constructor (System.Drawing.RectangleF frame, TKEmptyViewImage image, string title, string subtitle);
}

[BaseType (typeof (UIView))]
interface TKDropShadowImage {
        //@property (retain,nonatomic) UIImage *mask;
        [Export ("mask", ArgumentSemantic.Retain)]
        UIImage Mask { get; set;  }

}

[BaseType (typeof (UIView))]
interface TKGradientImage {
        //@property (retain,nonatomic) UIImage *mask;
        [Export ("mask", ArgumentSemantic.Retain)]
        UIImage Mask { get; set;  }

}

[BaseType (typeof (NSObject))]
interface TKGlobal {
        [Static]
        //+ (NSString*) fullBundlePath:(NSString*)bundlePath;
        [Export ("fullBundlePath:")]
        string FullBundlePath (string bundlePath);

}

[BaseType (typeof (UITableViewCell))]
interface TKLabelCell {
        //@property (retain, nonatomic) UILabel *label;
        [Export ("label", ArgumentSemantic.Retain)]
        UILabel Label { get; set;  }

}

[BaseType (typeof (TKLabelCell))]
interface TKLabelFieldCell {
        //@property (retain, nonatomic) UILabel *field;
        [Export ("field", ArgumentSemantic.Retain)]
        UILabel Field { get; set;  }

}

[BaseType (typeof (TKLabelCell))]
interface TKLabelSwitchCell {
        //@property (retain,nonatomic) UISwitch *switcher;
        [Export ("switcher", ArgumentSemantic.Retain)]
        UISwitch Switcher { get; set;  }


}

[BaseType (typeof (TKLabelCell))]
interface TKLabelTextFieldCell {
        //@property (retain, nonatomic) UITextField *field;
        [Export ("field", ArgumentSemantic.Retain)]
        UITextField Field { get; set;  }

}

[BaseType (typeof (TKLabelCell))]
interface TKLabelTextViewCell {
        //@property (retain, nonatomic) UITextView *textView;
        [Export ("textView", ArgumentSemantic.Retain)]
        UITextView TextView { get; set;  }

}

[BaseType (typeof (NSObject))]
[Model]
interface TKOverlayViewDelegate {
        //- (void) didTouchAtPoint:(CGPoint)point;
        [Export ("didTouchAtPoint:")]
        void DidTouchAtPoint (System.Drawing.PointF point);

}

[BaseType (typeof (UIView))]
interface TKMapView {
        //@property (readonly,nonatomic) BOOL pinMode;
        [Export ("pinMode")]
        bool PinMode { get;  }

        //@property (retain,nonatomic) MKMapView *mapView;
        [Export ("mapView", ArgumentSemantic.Retain)]
        MKMapView MapView { get; set;  }

        //@property (assign,nonatomic) id <TKMapViewDelegate> delegate;
  //Original:
  //[Export ("<TKMapViewDelegate>", ArgumentSemantic.Assign)]
  //TKMapView <TKMapViewDelegate> { get; set;  }
  //Fixed:
  [Export("delegate", ArgumentSemantic.Assign)]
  TKMapViewDelegate Delegate { get; set; }
 
        //- (void) setPinMode:(BOOL)pinMode;
        [Export ("setPinMode:")]
        void SetPinMode (bool pinMode);
		
		[Export ("initWithFrame:")]
		IntPtr Constructor (System.Drawing.RectangleF frame);

}

[BaseType(typeof (NSObject))]
[Model]
interface TKMapViewDelegate {
  //- (void) didPlacePinAtCoordinate:(CLLocationCoordinate2D)location;
  [Export ("didPlacePinAtCoordinate:")]
  void DidPlacePinAtCoordinate (CLLocationCoordinate2D location);

}

[BaseType (typeof (UIView))]
interface TKOverlayView {
        //@property (assign,nonatomic) id <TKOverlayViewDelegate> delegate;
  //Original:
  //[Export ("<TKOverlayViewDelegate>", ArgumentSemantic.Assign)]
  //TKOverlayView <TKOverlayViewDelegate> { get; set;  }
  //Fixed:
  [Export ("delegate", ArgumentSemantic.Assign)]
  TKOverlayViewDelegate Delegate { get; set; }
}

[BaseType (typeof (UIView))]
interface TKOverviewHeaderView {
        //@property (nonatomic,retain) UILabel *title;
        [Export ("title", ArgumentSemantic.Retain)]
        UILabel Title { get; set;  }

        //@property (nonatomic,retain) UILabel *subtitle;
        [Export ("subtitle", ArgumentSemantic.Retain)]
        UILabel Subtitle { get; set;  }

        //@property (nonatomic,retain) TKOverviewIndicatorView *indicator;
        [Export ("indicator", ArgumentSemantic.Retain)]
        TKOverviewIndicatorView Indicator { get; set;  }

}

[BaseType (typeof (UIView))]
interface TKOverviewIndicatorView {
        //- (id) initWithColor:(TKOverviewIndicatorViewColor)colour;
        //[Export ("initWithColor:")]
        //TKOverviewIndicatorView InitWithColor (TKOverviewIndicatorViewColor colour);
        
        [Export ("initWithColor:")]
        IntPtr Constructor (TKOverviewIndicatorViewColor color);

        //@property (assign,nonatomic) TKOverviewIndicatorViewColor color;
        [Export ("color", ArgumentSemantic.Assign)]
        TKOverviewIndicatorViewColor Color { get; set;  }

        //@property (copy,nonatomic) NSString *text;
        [Export ("text", ArgumentSemantic.Copy)]
        string Text { get; set;  }

}

[BaseType (typeof (UIViewController))]
interface TKOverviewTableViewController {
        //@property (nonatomic, retain) TKOverviewHeaderView *header;
        [Export ("header", ArgumentSemantic.Retain)]
        TKOverviewHeaderView Header { get; set;  }

        //@property (nonatomic, retain) UITableView *tableView;
        [Export ("tableView", ArgumentSemantic.Retain)]
        UITableView TableView { get; set;  }

}

/*
TODO: Must fix this, having issues if I implement Coordinate it complains it hides the inherited abtract type
      If I don't implement it it complains I'm not implementing the inherited abstract type
  */    
[BaseType (typeof (MKAnnotation))]
interface TKMapPlace {
        //@property (copy) NSString *title;
        [Export ("title", ArgumentSemantic.Copy)]
        string Title { get; set;  }

        //@property (assign,nonatomic) CLLocationCoordinate2D coordinate;
       // [Export ("coordinate", ArgumentSemantic.Assign)]
       // CLLocationCoordinate2D BaseCoordinate { get; set;  }

        //@property (assign, nonatomic) MKPinAnnotationColor color;
        [Export ("color", ArgumentSemantic.Assign)]
        MKPinAnnotationColor Color { get; set;  }

}


[BaseType (typeof (UITableViewCell))]
interface TKSwitchCell {
        //@property (copy,nonatomic) NSString *text;
        [Export ("text", ArgumentSemantic.Copy)]
        string Text { get; set;  }

        //@property (assign, nonatomic) UISwitch *slider;
        [Export ("slider", ArgumentSemantic.Assign)]
        UISwitch Slider { get; set;  }

}

[BaseType (typeof (UITableViewCell))]
interface TKTextViewCell {
        //@property (nonatomic,retain) UITextView *textView;
        [Export ("textView", ArgumentSemantic.Retain)]
        UITextView TextView { get; set;  }

}

[BaseType (typeof (UIView))]
interface TKTimeGraph {
        //@property (retain,nonatomic) NSMutableArray *data;
        [Export ("data", ArgumentSemantic.Retain)]
        NSObject[] Data { get; set;  }

        //@property (assign) id<TKTimeGraphDelegate> delegate;
        [Export ("delegate", ArgumentSemantic.Assign)]
        TKTimeGraphDelegate Delegate { get; set;  }

        //- (void) setTitle:(NSString*)str;
        [Export ("setTitle:")]
        void SetTitle (string str);

}

[BaseType (typeof (UIView))]
interface TKTimeGraphPointsView {
        //@property (retain,nonatomic) NSMutableArray *data;
        [Export ("data", ArgumentSemantic.Retain)]
        NSObject[] Data { get; set;  }

}

[BaseType (typeof (UIView))]
interface TKTimeGraphIndicator {
        //- (id)initWithFrame:(CGRect)frame title:(NSString*)str sideUp:(BOOL)up;
        //[Export ("initWithFrame:title:sideUp:")]
        //TKTimeGraphIndicator InitWithFrame (System.Drawing.RectangleF frame, string str, bool up);
       
        [Export ("initWithFrame:title:sideUp:")]
        IntPtr Constructor (System.Drawing.RectangleF frame, string str, bool up);
}

[BaseType (typeof (NSObject))]
[Model]
interface TKTimeGraphDelegate {
        //- (NSString*) titleForTimeGraph:(TKTimeGraph*)graph;
        [Export ("titleForTimeGraph:")]
        string TitleForTimeGraph (TKTimeGraph graph);

        //- (NSNumber*) goalValueForTimeGraph:(TKTimeGraph*)graph;
        [Export ("goalValueForTimeGraph:")]
        NSNumber GoalValueForTimeGraph (TKTimeGraph graph);

        //@required- (int) numberofPointsOnTimeGraph:(TKTimeGraph*)graph;
        [Export ("numberofPointsOnTimeGraph:")]
        int NumberofPointsOnTimeGraph (TKTimeGraph graph);

        //- (NSNumber*) timeGraph:(TKTimeGraph*)graph yValueForPoint:(int)x;
        [Export ("timeGraph:yValueForPoint:")]
        NSNumber YValueForPoint (TKTimeGraph graph, int x);


        //- (NSString*) timeGraph:(TKTimeGraph*)graph xLabelForPoint:(int)x;
        [Export ("timeGraph:xLabelForPoint:")]
        string XLabelForPoint (TKTimeGraph graph, int x);

        //- (NSString*) timeGraph:(TKTimeGraph*)graph yLabelForValue:(float)value;
        [Export ("timeGraph:yLabelForValue:")]
        string YLabelForValue (TKTimeGraph graph, float value);

}

[BaseType (typeof (UIViewController))]
interface TKTimeGraphController {
}

[BaseType (typeof (UIView))]
interface TapDetectingView {
        //@property (nonatomic, assign) id <TapDetectingViewDelegate> delegate;
  //Original:
  //[Export ("<TapDetectingViewDelegate>", ArgumentSemantic.Assign)]
  //TapDetectingView <TapDetectingViewDelegate> { get; set;  }
  //Fixed:
  [Export ("delegate", ArgumentSemantic.Assign)]
  TapDetectingViewDelegate Delegate { get; set; }
}

[BaseType (typeof (NSObject))]
[Model]
interface TapDetectingViewDelegate {
        [Abstract]
        //@optional- (void)tapDetectingView:(TapDetectingView *)view gotSingleTapAtPoint:(CGPoint)tapPoint;
        [Export ("tapDetectingView:gotSingleTapAtPoint:")]
        void GotSingleTapAtPoint (TapDetectingView  view, System.Drawing.PointF tapPoint);

        [Abstract]
        //- (void)tapDetectingView:(TapDetectingView *)view gotDoubleTapAtPoint:(CGPoint)tapPoint;
        [Export ("tapDetectingView:gotDoubleTapAtPoint:")]
        void GotDoubleTapAtPoint (TapDetectingView  view, System.Drawing.PointF tapPoint);

        [Abstract]
        //- (void)tapDetectingView:(TapDetectingView *)view gotTwoFingerTapAtPoint:(CGPoint)tapPoint;
        [Export ("tapDetectingView:gotTwoFingerTapAtPoint:")]
        void GotTwoFingerTapAtPoint (TapDetectingView  view, System.Drawing.PointF tapPoint);

}
}